home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / demovers / scripter / demo / cal.sic < prev    next >
Text File  |  1998-09-26  |  7KB  |  296 lines

  1. //ACE-SICPAR 4 0284 
  2. /*
  3.  * Nötige Anpassungen:
  4.  * loadList(): Pfad zur .dat Datei
  5.  */
  6.  
  7. /*
  8.  * Initialisierung einiger Variablen und Arrays
  9.  */
  10. const TAG = 3;
  11. const MONAT = 4;
  12. const JAHR = 5;
  13. const TAGNAME = 6;
  14.  
  15. mon = split("Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember");
  16.  
  17. daycount[0] = 31; daycount[1] = 28; daycount[2] = 31; daycount[3] = 30;
  18. daycount[4] = 31; daycount[5] = 30; daycount[6] = 31; daycount[7] = 31;
  19. daycount[8] = 30; daycount[9] = 31; daycount[10] = 30; daycount[11] = 31;
  20.  
  21. /*** hier fehlt noch die Korrektur von daycount fur Schaltjahre ***/
  22.  
  23. dat = localtime();          // ausführliches Datum von heute
  24. today = dat;
  25. dat[TAG] = 1;
  26. tim = mktime(dat);          // auf den 1. des Monats zurückrechnen
  27. dat = localtime(tim);       // ausführliches Datum vom 1. des Monats
  28.  
  29. merker.length = 32;
  30.  
  31. loadList();                 // Liste der Termine laden
  32.  
  33. listbox.createBox(1, 0, 1, 1); // Listbox erzeugen
  34. mode = "month";
  35. //- mode = "year";
  36. interface();
  37. listbox.closeBox();         // Listbox vom Bildschirm entfernen
  38. listbox.freeItems();        // Liste freigeben
  39.  
  40. proc interface()
  41. local is_open, temp, event, i;
  42. {
  43.     is_open = 0;
  44.  
  45.     listbox.installButton(1, "<<");
  46.     listbox.installButton(2, ">>");
  47.  
  48.     do {
  49.         if (mode == "month") {
  50.             sprintf(temp, " %s %d", mon[dat[MONAT]], 1900+dat[JAHR]);
  51.             month_collectData();
  52.             month_fillBox();
  53.         }
  54.         else if (mode == "year") {
  55.             year_collectData();
  56.             sprintf(temp, " %d, %d Einträge ", 1900+dat[JAHR], rCount);
  57.         }
  58.         reminder2box();
  59.  
  60.         if (is_open == 0) {
  61.             listbox.openBox(" Kalender ");
  62.             is_open = 1;
  63.         }
  64.         listbox.setInfo(temp);
  65.  
  66.         newContents = 0;
  67.         do {
  68.             event = listbox.event();
  69.             switch (event[0]) {
  70.                 case "cancel":              // Abbruch
  71.                 case "okay":                // OK
  72.                     return;
  73.                 case "popup_2":
  74.                 case "popup_1":
  75.                     break;
  76.                 case "button_1":
  77.                     if (mode == "month") {
  78.                         dat[MONAT]--;
  79.                         if (dat[MONAT] == -1) {
  80.                             dat[MONAT] = 11;
  81.                             dat[JAHR]--;
  82.                         }
  83.                     }
  84.                     else if (mode == "year") {
  85.                         dat[JAHR]--;
  86.                     }
  87.  
  88.                     i = mktime(dat);
  89.                     dat = localtime(i);
  90.                     listbox.freeItems();
  91.                     newContents = 1;
  92.                     break;
  93.                 case "button_2":
  94.                     if (mode == "month") {
  95.                         dat[MONAT]++;
  96.                         if (dat[MONAT] == 12) {
  97.                             dat[MONAT] = 0;
  98.                             dat[JAHR]++;
  99.                         }
  100.                     }
  101.                     else if (mode == "year") {
  102.                         dat[JAHR]++;
  103.                     }
  104.  
  105.                     i = mktime(dat);
  106.                     dat = localtime(i);
  107.                     listbox.freeItems();
  108.                     newContents = 1;
  109.                     break;
  110.                 case "D&D_in":  // D&D in das Fenster
  111.                     break;
  112.                 case "selected": // Selektion eines Eintrages (kein Doppelklick)
  113.                     i = event[1, 0];
  114.                     if (i>='0' && i<='9')
  115.                         listbox.setEditline(event[1]);
  116.                     break;
  117.  
  118.                 case "key":
  119. //-                     print(event);
  120.                     break;
  121.             }
  122.         } while (newContents == 0);
  123.  
  124.     } while (1);
  125. }
  126.  
  127.  
  128. /*
  129.  * Alle Termine des aktuellen Monates sammeln und Merker für die
  130.  * Ausgabe des kleinen Kalenders setzen
  131.  *
  132.  * Ausgabe: Array <reminder> mit <rCount> Termin-Einträgen
  133.  */
  134. proc month_collectData()
  135. local day, mon, year;
  136. local j, temp;
  137. {
  138.     for (j=0; j<32; merker[j++] = ' ');
  139.     rCount = 0;
  140.     reminder.length = 30;
  141.  
  142.     for (j=0; j<listCount; j++) {
  143.         line = liste[j];
  144.         getDate(line, day, mon, year);
  145.  
  146.         if (mon == dat[MONAT] && year == 1900+dat[JAHR]) {
  147.             merker[day] = '*';
  148.             temp = substr(line, 11);
  149.             insertEntry(day, mon+1, temp);
  150.         }
  151.     }
  152.  
  153.     if (today[JAHR]==dat[JAHR] && today[MONAT]==dat[MONAT])
  154.         merker[today[TAG]] = 9;
  155. }
  156.  
  157.  
  158. /*
  159.  * Ausgabe des kleinen Kalenders und aller Termine des aktuellen
  160.  * Monates in die Listbox
  161.  */
  162. proc month_fillBox()
  163. local i, j, day, temp, count;
  164. {
  165.     i = dat[TAGNAME]-1;                     // Wochentag am 1. des Monates
  166.     day = split("So,Mo,Di,Mi,Do,Fr,Sa");
  167.  
  168.     for (j=0; j<i; j++)                     // bis zum 1. mit leeren Einträgen
  169.         day[j] += "    ";                   // auffüllen
  170.  
  171.     count = daycount[dat[MONAT]];           // Anzahl Tage dieses Monates
  172.  
  173.     for (j=1; j<=count; j++) {              // über alle Tage des Monates...
  174.         sprintf(temp, " %-2d%c", j, merker[j]);
  175.         day[i++] += temp;                   // Tag des Monates eintragen
  176.         if (i>6) i=0;
  177.     }
  178.  
  179.     listbox.insertItem("-b", day);          // Kalender ausgeben
  180.     listbox.insertItem("-b", " ");          // Trennzeile
  181. }
  182.  
  183.  
  184.  
  185. /*
  186.  * Alle Termine des aktuellen Jahres sammeln;
  187.  *
  188.  * Ausgabe: Array <reminder> mit <rCount> Termin-Einträgen
  189.  */
  190. proc year_collectData()
  191. local day, mon, year;
  192. local j, temp, line, i;
  193. {
  194.     rCount = 0;
  195.     reminder.length = 30;
  196.  
  197.     for (j=0; j<listCount; j++) {
  198.         line = liste[j];
  199.         getDate(line, day, mon, year);
  200.  
  201.         if (year == 1900+dat[JAHR]) {
  202.             temp = substr(line, 3, 2);
  203.             line = substr(line, 11);
  204.             if (temp == "XX") {
  205.                 for (i=1; i<13; i++) {
  206.                     insertEntry(day, i, line);
  207.                 }
  208.             }
  209.             else {
  210.                 insertEntry(day, mon+1, line);
  211.             }
  212.         }
  213.     }
  214.     insertEntry(today[TAG], today[MONAT]+1, "---------- Heute ----------");
  215. }
  216.  
  217.  
  218. proc insertEntry(day, mon, &text)
  219. local temp, i, line;
  220. local mondiff, daydiff;
  221. {
  222.     sprintf(temp, "%02d.%02d. %s", day, mon, text);
  223.  
  224.     for (i=0; i<rCount; i++) {
  225.         line = reminder[i];
  226.         mondiff = substr(line, 3, 2)+0;
  227.         mondiff -= mon;
  228.         daydiff = substr(line, 0, 2)+0;
  229.         daydiff -= day;
  230.         if (mondiff>0 || (mondiff==0 && daydiff>=0)) {
  231.             insert(reminder, i, 1);
  232.             reminder[i] = temp;
  233.             ++rCount;
  234.             return;
  235.         }
  236.     }
  237.     reminder[rCount++] = temp;
  238.     if (rCount==reminder.length) reminder.length += 30;
  239. }
  240.  
  241.  
  242. /*
  243.  * Ausgabe aller Termine zuvor zusammengestellten Termine
  244.  * in die Listbox
  245.  */
  246. proc reminder2box()
  247. local j;
  248. {
  249.     reminder.length = rCount;
  250.     listbox.insertItem("-b", reminder);
  251. }
  252.  
  253.  
  254. /*
  255.  * Datum des angegebenen Eintrages bestimmen
  256.  */
  257. proc getDate(&line, &day, &mon, &year)
  258. local temp;
  259. {
  260.     temp = substr(line, 3, 2);
  261.     mon = (temp == "XX") ? dat[MONAT] : temp-1;
  262.     temp = substr(line, 0, 2);
  263.     day = (temp == "XX") ? dat[TAG] : temp+0;
  264.     temp = substr(line, 6, 4);
  265.     year = (temp == "XXXX") ? dat[JAHR]+1900 : temp+0;
  266. }
  267.  
  268. /*
  269.  * Liste der Termine einlesen und in einem Array speichern
  270.  *
  271.  * Ausgabe: Array <liste> mit <listCount> Einträgen
  272.  */
  273. proc loadList()
  274. local file, line;
  275. {
  276.     file = "c:\\auto\\apps\\autosic\\birthday.dat";
  277.     listCount = 0;
  278.     liste.length = 100;
  279.  
  280.     while (getline(file, line)) {
  281.         liste[listCount++] = line;
  282.         if (listCount == list.length)
  283.             liste.lenght += 100;
  284.     }
  285.     fclose(file);
  286. }
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.